package CrowdBenchmark.parts;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import CrowdBenchmark.events.EventConstants;
import CrowdBenchmark.models.Answer;
import CrowdBenchmark.tools.io.AnswersReader;
import CrowdBenchmark.tools.io.Crowd_TxtWriter;
public class AnswerPart extends AbstractPart {
private TableViewer tableViewer;
private Button btnImport;
private Button btnExport;
@PostConstruct
public void createComposite(Composite parent) {
parent.setLayout(new GridLayout(2, false));
createViewer(parent);
createButton(parent);
}
private void createButton(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridData gd_composite = new GridData(SWT.LEFT, SWT.CENTER, false,
false, 1, 1);
gd_composite.widthHint = 116;
composite.setLayoutData(gd_composite);
composite.setLayout(new GridLayout(2, false));
{
btnExport = new Button(composite, SWT.NONE);
btnExport.setText("Export");
btnExport.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
@Override
public void widgetSelected(SelectionEvent e) {
// System.out.println(tableViewer.getInput());
FileDialog dlg = new FileDialog(btnExport.getShell(),
SWT.SAVE);
String[] filterExt = { "*.txt" };
dlg.setFilterExtensions(filterExt);
dlg.setText("Save");
String path = dlg.open();
if (path == null)
return;
List<Answer> answers = (List<Answer>) tableViewer
.getInput();
Crowd_TxtWriter.getInstance().WriteToFile(answers, path);
}
});
}
}
protected void importData(String path) {
if (path == null)
return;
AnswersReader reader = new AnswersReader();
reader.readfile(path);
List<Answer> data = appendData(reader.getAnswers());
tableViewer.setInput(data);
tableViewer.refresh();
}
protected List<Answer> appendData(List<Answer> data) {
List<Answer> currentData = (List<Answer>) tableViewer.getInput();
System.out.println(data.size());
for (Answer answer : data) {
currentData.add(answer);
}
return currentData;
}
private void createViewer(Composite parent) {
tableViewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
| SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
createColumns(parent, tableViewer);
final Table table = tableViewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
tableViewer.setContentProvider(new ArrayContentProvider());
// Get the content for the viewer, setInput will call getElements in the
// contentProvider
// tableViewer.setInput(ModelProvider.INSTANCE.getAnswers());
// Make the selection available to other views
// getSite().setSelectionProvider(tableViewer);
// Set the sorter for the table
// Layout the viewer
GridData gridData = new GridData();
gridData.verticalAlignment = GridData.FILL;
gridData.horizontalSpan = 2;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.horizontalAlignment = GridData.FILL;
tableViewer.getControl().setLayoutData(gridData);
}
private void createColumns(Composite parent, TableViewer tableViewer) {
String[] titles = { "EvalID", "Worker", "Question", "Answer" };
int[] bounds = { 100, 100, 100, 100 };
// column is for the evalID
TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], 0);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Answer p = (Answer) element;
return p.getEvalID() + "";
}
});
// First column is for the worker
col = createTableViewerColumn(titles[1], bounds[1], 1);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Answer p = (Answer) element;
return p.getWorker();
}
});
// Second column is for the question
col = createTableViewerColumn(titles[2], bounds[2], 2);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Answer p = (Answer) element;
return p.getQuestion();
}
});
// Third column is for the answer
col = createTableViewerColumn(titles[3], bounds[3], 3);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Answer p = (Answer) element;
return p.getAnswer();
}
});
}
@Inject
@Optional
void updateHandler(@UIEventTopic(EventConstants.DATA_UPDATE_CLEAR) int num) {
// importData(s + "");
tableViewer.setInput(new ArrayList<Answer>());
tableViewer.refresh();
}
@Inject
@Optional
void updateHandler(
@UIEventTopic(EventConstants.DATA_UPDATE_UPDATED) String path) {
importData(path);
// System.out.println(path);
}
private TableViewerColumn createTableViewerColumn(String title, int bound,
int colNumber) {
final TableViewerColumn viewerColumn = new TableViewerColumn(
tableViewer, SWT.NONE);
final TableColumn column = viewerColumn.getColumn();
column.setText(title);
column.setWidth(bound);
column.setResizable(true);
column.setMoveable(true);
return viewerColumn;
}
@Focus
public void setFocus() {
tableViewer.getControl().setFocus();
}
public TableViewer getTableViewer() {
return tableViewer;
}
public void setTableViewer(TableViewer tableViewer) {
this.tableViewer = tableViewer;
}
}